This invention concerns a printer driver for a high performance color printer, such as a printer using a page-width drop-on-demand inkjet printhead. In another aspect it concerns a method of printing.
The invention is a printer driver for a high performance printer, where the printer driver manages a two layer page buffer representing a page to be printed. The first layer of the buffer contains background contone data, while the second layer contains foreground bi-level data. The printer driver transmits the buffer to the printer on completion of the page, and the printer composits the two layers after halftoning the contone layer. The printer driver operates such that when it determines that contone data being composited with the contone layer obscures data in the bi-level layer, the obscured bi-level data is removed from the bi-level layer and either discarded, or in the case where there is some interaction between the image represented by the obscuring contone data and the image represented by the obscured bi-level data then the obscured bi-level data is composited with the contone layer before the obscuring contone data is composited with the contone layer.
The contone data may have a lower resolution than the bi-level data.
The two layer page buffer may be augmented with a third layer of contone data, where the third layer contains a contone version of the bi-level data of the second layer subsampled at the resolution of the first layer, and where the printer driver operates such that when it determines that contone data being composited with the first layer obscures contone data in the third layer, the obscured contone data is removed from the third layer and is composited with the contone layer before the obscuring contone data is composited with the contone layer, and the bi-level data in the second layer which corresponds to the obscured contone data in the third layer is removed from the second layer
Interaction will typically occur between an image represented by the obscuring contone data and obscured bi-level data where the contone data represents a non-opaque image object.
The contone data will typically be color data, whereas the bi-level data will usually be black data; although it might be another color. Additional layers may be provided to accommodate additional foreground bi-level layers of additional colors.
The printer driver will usually be closely coupled with a host graphics system, so that the printer driver can provide device-specific handling for different graphics and imaging operations, in particular compositing operations and text operations.
The host will provide support for color management, so that device-independent color can be converted to printer-specific color in a standard way. The page description sent to the printer generally contains device-specific color.
The host graphics system renders images and graphics to a nominal resolution specified by the printer driver, but it allows the printer driver to take control of rendering text. In particular, the graphics system provides sufficient information to the printer driver to allow it to render and position text at a higher resolution than the nominal device resolution.
The host graphics system requires random access to a contone page buffer at the nominal device resolution, into which it composites graphics and imaging objects, but that it allows the printer driver to take control of the actual compositing in that it expects the printer driver to manage the page buffer.
The printer""s page description may contains a 267 ppi contone layer and an 800 dpi black layer. The printer driver may specify a nominal page resolution of 267 ppi to the graphics system. Where possible the printer driver relies on the graphics system to render image and graphics objects to the pixel level at 267 ppi, with the exception of black text. The printer driver fields all text rendering requests, detects and renders black text at 800 dpi, but returns non-black text rendering requests to the graphics system for rendering at 267 ppi.
The following rules may be implemented by the printer driver:
When a black object is composited with the page buffer it is composited with the bi-level black layer. The black layer is updated by simply oring the object opacity with the black layer opacity, and the corresponding part of the medium-resolution contone black layer is re-computed from the high-resolution black layer.
When a contone color object is composited with the page buffer it is composited with the contone layer. The contone layer and the black layer are updated as follows:
Wherever the contone object obscures the black layer, even if not fully opaquely, the affected black layer pixels are pushed from the black layer to the contone layer, i.e. composited with the contone layer and removed from the black layer. The contone object is then composited with the contone layer.
If a contone object pixel is fully opaque, then there is no need to push the corresponding black pixels into the background contone layer, since the background contone pixel will subsequently be completely obliterated by the foreground contone pixel.
The bi-level black layer data may be transmitted to the printer in compressed form. Group 4 facsimile coding may be used for this purpose, but it is better if the modified Huffman coding of horizontal run lengths is removed, or tuned for higher resolutions. Alternatively EDRL compression may be used.
The contone layer data may also be transmitted to the printer in compressed form. JPEG or wavelet compression may be used for this purpose.
In another aspect the invention is a method of operating a printer driver for a high performance printer, where the printer driver manages a two layer page buffer; the first layer is for contone data, the second layer is for bi-level data where the bi-level data will be composited with the contone data by the printer; the method comprising the steps of:
determining when contone data being composited with the contone layer obscures data in the bi-level layer, removing obscured bi-level data from the bi-level layer, and either discarding it, or in the case where there is some interaction between the image represented by the obscuring contone data and the image represented by the obscured bi-level data compositing the obscured bi-level data with the contone layer before compositing the contone data with the contone layer.